package com.sgcc.lms.openstack.service;

import com.sgcc.lms.openstack.exception.NullTokenException;
import com.sgcc.lms.openstack.model.po.Instance;
import org.openstack4j.model.common.ActionResponse;
import org.openstack4j.model.compute.*;


import java.util.List;

/**
 * @Author: 李孟帅
 * @CreateTime: 2020-07-23 16:37
 * @Description:
 */
public interface NovaService {


    /**
     * @Author 李孟帅
     * @Description 列出实例类型
     * @Date 2020/7/23
     **/
    List<? extends Flavor> flavors(String tokenId) throws NullTokenException;


    /**
     * @Author 李孟帅
     * @Description 获取实例类型
     * @Date 2020/7/23
     **/
    Flavor getFlavor(String tokenId, String id) throws NullTokenException;

    /**
     * @Author 李孟帅
     * @Description 删除实例类型
     * @Date 2020/7/23
     **/
    ActionResponse deleteFlavor(String tokenId, String id) throws NullTokenException;

    /**
     * @Author 李孟帅
     * @Description 创建实例类型
     * @Date 2020/7/23
     **/
    Flavor createFlavor(String tokenId, Flavor flavor) throws NullTokenException;

    /**
     * @Author 李孟帅
     * @Description 获取特定项目的配额集
     * @Date 2020/7/23
     **/
    QuotaSet getQuotaSet(String tokenId, String projectId) throws NullTokenException;

    /**
     * @Author 李孟帅
     * @Description 更新特定项目的配额集
     * @Date 2020/7/23
     **/
    QuotaSet updateQuotaSet(String tokenId, String projectId, QuotaSetUpdate quotaSetUpdate) throws NullTokenException;

    /**
     * @Author 李孟帅
     * @Description 列出密钥对
     * @Date 2020/7/23
     **/
    List<? extends Keypair> keypairs(String tokenId) throws NullTokenException;

    /**
     * @Author 李孟帅
     * @Description 获取密钥对
     * @Date 2020/7/23
     **/
    Keypair getKeypair(String tokenId, String name) throws NullTokenException;

    /**
     * @Author 李孟帅
     * @Description 删除密钥对
     * @Date 2020/7/23
     **/
    ActionResponse deleteKeypair(String tokenId, String name) throws NullTokenException;

    /**
     * @Author 李孟帅
     * @Description 创建密钥对
     * @Date 2020/7/23
     **/
    Keypair createKeypair(String tokenId, String name, String publicKey) throws NullTokenException;

    /**
     * @Author 李孟帅
     * @Description 列出实例
     * @Date 2020/7/24
     **/
    List<? extends Server> servers(String tokenId) throws NullTokenException;

    /**
     * @Author 李孟帅
     * @Description 获取实例
     * @Date 2020/7/24
     **/
    Server getServer(String tokenId, String id) throws NullTokenException;

    /**
     * @Author 李孟帅
     * @Description 创建实例
     * @Date 2020/7/24
     **/
    Server createServer(String tokenId, Instance instance) throws NullTokenException;

    /**
     * @Author 李孟帅
     * @Description 删除实例
     * @Date 2020/7/24
     **/
    ActionResponse deleteServer(String tokenId, String id) throws NullTokenException;

    /**
     * @Author 李孟帅
     * @Description 获取实例VNC控制台
     * @Date 2020/7/24
     **/
    VNCConsole getConsole(String tokenId, String id) throws NullTokenException;
}
